#pragma once
#include <map>
#include <vector>
#include <string>

namespace symbol_table
{
    template <typename T>
    class SymbolTable
    {
    public:
        SymbolTable();
        void EnterScope();
        void ExitScope();
        void Insert(std::string name, T info);
        T Lookup(std::string name);
        void Clear();
    private:
        typedef std::map<std::string, T> Scope;
        std::vector<Scope> scopes;
    };
}